/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.senaclem.sael.vista;


import co.edu.senaclem.atus.vista.*;
import co.edu.senaclem.logica.UsuariosLogicaLocal;
import co.edu.senaclem.modelo.Aprendiz;
import co.edu.senaclem.modelo.Coordinador;
import co.edu.senaclem.modelo.Funcionario;
import co.edu.senaclem.modelo.Guarda;
import co.edu.senaclem.modelo.Instructor;
import co.edu.senaclem.modelo.Personal;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.password.Password;
import org.primefaces.component.selectonemenu.SelectOneMenu;

/**
 *
 * @author FELIPE
 */
@ManagedBean(name = "usuariosSaelVista")
@RequestScoped
public class UsuariosVista {

    @EJB
    private UsuariosLogicaLocal usuariosLogica;
    private InputText txtUsuario;
    private Password passUsuario;
    private SelectOneMenu cmbTipo;
    private String opcion;
    //
    private Password passClaveOld;
    private Password passClaveNew;
    private Password passClaveNew2;

    public Password getPassClaveOld() {
        return passClaveOld;
    }

    public void setPassClaveOld(Password passClaveOld) {
        this.passClaveOld = passClaveOld;
    }

    public Password getPassClaveNew() {
        return passClaveNew;
    }

    public void setPassClaveNew(Password passClaveNew) {
        this.passClaveNew = passClaveNew;
    }

    public Password getPassClaveNew2() {
        return passClaveNew2;
    }

    public void setPassClaveNew2(Password passClaveNew2) {
        this.passClaveNew2 = passClaveNew2;
    }

    public SelectOneMenu getCmbTipo() {
        return cmbTipo;
    }

    public void setCmbTipo(SelectOneMenu cmbTipo) {
        this.cmbTipo = cmbTipo;
    }

    public InputText getTxtUsuario() {
        return txtUsuario;
    }

    public void setTxtUsuario(InputText txtUsuario) {
        this.txtUsuario = txtUsuario;
    }

    public Password getPassUsuario() {
        return passUsuario;
    }

    public void setPassUsuario(Password passUsuario) {
        this.passUsuario = passUsuario;
    }

     public void ingresar_action() {
        //System.out.println("Ingresar");
        String pagina = "";
        String usuarioLogeado = "";

        try {

            opcion = cmbTipo.getValue().toString();
            Personal usuario = new Personal();
            Long documento = Long.parseLong(txtUsuario.getValue().toString());
            usuario.setDocumento(documento);
            usuario.setClave(passUsuario.getValue().toString());

            if (opcion.equals("COORDINADOR")) {
                Coordinador coordinador = new Coordinador();
                coordinador.setDocumento(usuario);
                usuariosLogica.autenticar(coordinador);
                //sesion
                usuarioLogeado = txtUsuario.getValue().toString();

                pagina = "indexCoordinador.xhtml";
            } else if (opcion.equals("INSTRUCTOR")) {
                Instructor instructor = new Instructor();
                instructor.setDocumento(usuario);
                usuariosLogica.autenticar(instructor);
                //sesion
                usuarioLogeado = txtUsuario.getValue().toString();
                pagina = "indexInstructor.xhtml";
            } else {
                Aprendiz aprendiz = new Aprendiz();
                aprendiz.setDocumento(usuario);
                usuariosLogica.autenticar(aprendiz);
                //sesion
                usuarioLogeado = txtUsuario.getValue().toString();
                pagina = "indexAprendiz.xhtml";
            }

            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", usuarioLogeado);
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("tipoUsuario", opcion);
            FacesContext.getCurrentInstance().getExternalContext().redirect(pagina);

        } catch (NumberFormatException nfe) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", "Los datos de Ingreso son Obligatorios!"));
        } catch (IOException ex) {
            Logger.getLogger(co.edu.senaclem.aspera.vista.UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", e.getMessage()));
        }

    }

    public void limpiar_action() {
        //System.out.println("Limpiar");

        txtUsuario.setValue("");
        passUsuario.setValue("");
        cmbTipo.setValue("-1");
    }

    public void cerrarSesion_action() {
        //System.out.println("Cerrar Sesión");

        try {
            // Usar el contexto de JSF para invalidar la sesión,
            // NO EL DE SERVLETS (nada de HttpServletRequest)

            // Redirección de nuevo con el contexto de JSF,
            // si se usa una HttpServletResponse fallará.
            // Sin embargo, como ya está fuera del ciclo de vida 
            // de JSF se debe usar la ruta completa -_-U
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("usuario");
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("tipoUsuario");
            ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
            String ctxPath = ((ServletContext) ctx.getContext()).getContextPath();
            //
            Object session = ctx.getSession(false);
            HttpSession httpSession = (HttpSession) session;
            httpSession.invalidate();
            //System.out.println(ctxPath + "/faces/aspera/indexAspera.xhtml");
            ctx.redirect(ctxPath + "/faces/sael/indexSael.xhtml");
        } catch (IOException ex) {
            ex.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
        }
    }

    ////////////////////
    public void cambiarPass_action() {
        //System.out.println("Cambiar Pass");

        if (usuariosLogica.validarSesion()) {
            try {
                String user = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
                String tipoUser = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("tipoUsuario");
                //System.out.println("usuario: " + user + " tipo: " + tipoUser);

                usuariosLogica.cambiarContraseña(user, passClaveOld.getValue().toString(),
                        passClaveNew.getValue().toString(), passClaveNew2.getValue().toString());

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje: ", "La Contraseña Ha Sido Actualizada con Exito"));
            } catch (Exception ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error: ", ex.getMessage()));
            }

        } else {
            try {
                FacesContext.getCurrentInstance().getExternalContext().redirect("../SesionInvalida.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(UsuariosVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void limpiarPass_action() {
        //System.out.println("Limpiar Pass");

        passClaveNew.setValue("");
        passClaveNew2.setValue("");
        passClaveOld.setValue("");

    }
}
